\documentclass[a4paper,12pt]{report}
\usepackage[T1]{fontenc}			% codifica dei font
\usepackage[utf8]{inputenc}			% codifica di input
\usepackage[italian]{babel}			% trattare le lingue
\usepackage{indentfirst}				% indentazione della prima riga del paragrafo
\usepackage{enumitem}				% personalizzazione degli elenchi
\usepackage{microtype}				% migliora il riempimento delle righe
\usepackage[colorlinks]{hyperref}	% colora i link
\usepackage{booktabs}
\usepackage{hyperref}
\usepackage{tabularx}
%\usepackage{comment}
\usepackage{graphicx}
%\usepackage{caption}
%\usepackage{frontespizio}

\author{Simone Cainero}
\title{Progetto}

\graphicspath{{immagini/}}

% definisco l'ambiente "tabella"
\newenvironment{tabellaX}[2]%
	{\begin{table}{#1}\footnotesize%
		\begin{center}%
			\begin{tabularx}{\textwidth}{#2}}%
			{\end{tabularx}%
		\end{center}%
	\end{table}}

\newenvironment{tabella}[1]%
	{\begin{table}{b}\footnotesize%
		\begin{center}%
			\begin{tabularx}{\textwidth}{#1}}%
			{\end{tabularx}%
		\end{center}%
	\end{table}}


\begin{document}
	\begin{titlepage}
		%\begin{figure}%[htbp]
		%	\centering
		%	\includegraphics[width=0.5\textwidth]{crystal.jpg}
		%\end{figure}

		\begin{center}
			\vspace{1cm}
			\Huge{Crystal Software}
			\vspace{2cm}

			{\fontsize{40}{50}\selectfont Progetto}
		\end{center}

		\begin{table}[b]\begin{center}\begin{tabularx}{\textwidth}{rlXl}
			\toprule
			\textbf{Rev.}	& \textbf{Data}	& \textbf{Descrizione}		& \textbf{Autore} \\
			\midrule
			1.1				& 01/03/2013	& Creazione del documento	& Simone Cainero \\
			\midrule
			1.0				& 22/02/2013	& Creazione del documento	& Simone Cainero \\
			\bottomrule
		\end{tabularx}\end{center}\end{table}
	\end{titlepage}

	\tableofcontents

	\chapter{Scopo e audience}
	Questo documento è il prodotto dell'attività di progettazione del sistema e ha lo scopo descrivere l'architettura del sistema e le tecnologie usate. I destinatari del documento sono gli sviluppatori.

	\chapter{Glossario}
	Di seguito alcuni termini utilizzati nel documento.
	\begin{itemize}
		\item \emph{Termine}: descrizione.
	\end{itemize}

% Architettura
	\chapter{Architettura del sistema}

			\begin{par}Questo capitolo descrive l'architettura del sistema \emph{People} illustrando le classi software che lo compongono.\end{par}

			\begin{par}Il diagramma di figura~\ref{diagramma_classi} mostra le classi del sistema e il modo in cui queste classi sono in relazione fra loro. Di seguito vengono descritte le singole classi.\end{par}
			\begin{figure}[htbp]
				\caption{Diagramma delle classi del sistema.}
				\label{diagramma_classi}
				\centering
				\includegraphics[width=\textwidth]{diagramma_classi.pdf}
			\end{figure}

			\begin{par}La classe \emph{MainViewer} corrisponde all'interfaccia di visualizzazione principale del sistema (vedi figura~\ref{interfaccia_elenco_anagrafiche}). Contiene l'elenco di anagrafiche permette all'utente di selezionarne una per la visualizzazione tramite il metodo \emph{viewAnagrafica}. Il metodo \emph{filtra} permette di accedere alla schermata di ricerca delle anagrafiche (figura~\ref{interfaccia_filtra_anagrafiche}). Il metodo \emph{newAnagrafica} permette di inserire una nuova anagrafica mediante l'interfaccia apposita (figura~\ref{interfaccia_anagrafica}), mentre il metodo \emph{close}.\end{par}

			\begin{par}La classe \emph{AnagraficaFIltra} corrisponde all'interfaccia di ricerca delle anagrafiche (figura~\ref{interfaccia_filtra_anagrafiche}). Attraverso i suoi attributi, che corrispondono a campi di testo, permette all'utente di decidere i parametri tramite i quali effettuare la rierca. Il metodo \emph{filtra} esegue questa ricerca e ritorna il risultato (vettore di anagrafiche) alla classe \emph{MainViewer}.\end{par}

			\begin{par}La classe \emph{AnagraficaViewer} corrisponde all'interfaccia di visualizzazione di una singola anagrafica (figura~\ref{interfaccia_anagrafica}). Contiene quindi tanti campi quanti sono gli attributi da visualizzare delle anagrafiche. Tramite il metodo \emph{modifyAnagrafica} permette all'utente di entrare in modalità di modifica, mentre tramite il metodo \emph{printAnagrafica} permette di stampare i dati dell'anagrafica. Il metodo \emph{update} viene utilizzato per dire all'interfaccia di aggiornare i propri campi leggendo i dati dall'anagrafica corrispondente.\end{par}

			\begin{par}La classe \emph{CertificatoViewer} corrisponde all'interfaccia di visualizzazione dei certificati di una certa anagrafica (figura~\ref{interfaccia_certificati}). Tramite il metodo \emph{changeStateCertificato} permette di modificare lo stato di un determinato certificato. Tramite il metodo \emph{newCertificato} permette di aggiungere un certificato all'anagrafica. Il metodo \emph{update} viene utilizzato per dire all'interfaccia di aggiornare i propri campi leggendo i dati dei certificati dall'anagrafica corrispondente.\end{par}

			\begin{par}La classe \emph{Certificato} rappresenta un certificato legato ad una certa anagrafica. Quando viene istanziata, se il costruttore riceve uno specifico \emph{id}, allora l'oggetto legge dalla base di dati le informazioni per inizializzare i propri attributi, altrimenti si tratta di un nuovo certificato e l'oggetto si incarica di registrare le relative informazioni nella base di dati. La classe \emph{Certificato} ha tre sottoclassi, una per ogni tipo di certificato.\end{par}

			\begin{par}La classe \emph{Anagrafica} rappresenta un'anagrafica. Quando viene istanziata, se il costruttore riceve uno specifico \emph{id}, allora l'oggetto legge dalla base di dati le informazioni per inizializzare i propri attributi, altrimenti si tratta di una nuova anagrafica e l'oggetto si incarica di registrare le relative informazioni nella base di dati. Il metodo \emph{getCertificati} restituisce il vettore di certificati appartenenti a quell'anagrafica.\end{par}

			\begin{par}La classe \emph{Indirizzo} rappresenta il dato \emph{indirizzo}, che viene utilizzato per registrare le informazioni di residenza e di domicilio di una certa anagrafica.\newline\end{par}

			\begin{figure}[htbp]
				\caption{Diagramma di interazione del sistema.}
				\label{diagramma_interazione}
				\centering
				\includegraphics[width=\textwidth]{diagramma_interazione.pdf}
			\end{figure}

			\begin{par}Il diagramma in figura~\ref{diagramma_interazione} mostra un'interazione tipica fra le classi del sistema, composta da
				\begin{itemize}
					\item ricerca da parte dell'utente di una specifica anagrafica
					\item visualizzazione dei dati dell'anagrafica
					\item modifica dei dati
					\item visualizzazione dei certificati
					\item cambio di stato di un certificato
					\item chiusura dell'interfaccia di visualizzazione
				\end{itemize}\end{par}

	\chapter{Interfacce}
			\begin{par}Questo capitolo descrive l'interfaccia utente del software \emph{People}. La descrizione è fatta a livello progettuale, pertanto per ogni schermata del software viene presentata una figura che ne rappresenta il layout e vengono descritti i funzionamenti dei vari comandi.\end{par}

			\begin{par}La figura~\ref{interfaccia_elenco_anagrafiche} mostra il layout della schermata \emph{MainViewer}, che è la schermata principale e corrisponde all'omonima classe. Consente all'utente di selezionare un'anagrafica per visualizzarne i dettagli da un lista cliccabile, di effettuare una ricerca tra le varie anagrafiche, e di inserire una nuova anagrafica. Nel primo e nell'ultimo caso viene richiamata  la schermata \emph{AnagraficaViewer}, mentre nel secondo caso la schermata \emph{AnagraficaFiltra}.\end{par}
			\begin{figure}[htbp]
				\caption{Schermata \emph{MainViewer}.}
				\label{interfaccia_elenco_anagrafiche}
				\centering
				\includegraphics[width=0.8\textwidth]{interfaccia_elenco_anagrafiche.pdf}
			\end{figure}

			\begin{par}La figura~\ref{interfaccia_filtra_anagrafiche} mostra il layout della schermata \emph{AnagraficaFiltra}, che corrisponde all'omonima classe e consente all'utente di effettuare una ricerca nell'archivio delle anagrafiche filtrando i vari campi delle anagrafiche attraverso appositi controlli testuali. Questa schermata viene richiamata dalla \emph{MainViewer}, a cui restituisce il controllo dell'applicazione quando l'utente preme il tasto \emph{Filtra}.\end{par}
			\begin{figure}[htbp]
				\caption{Schermata \emph{AnagraficaFiltra}.}
				\label{interfaccia_filtra_anagrafiche}
				\centering
				\includegraphics[width=0.8\textwidth]{interfaccia_filtra_anagrafiche.pdf}
			\end{figure}

			\begin{par}La figura~\ref{interfaccia_anagrafica} mostra il layout della schermata \emph{AnagraficaViewer}, che corrisponde all'omonima classe e ha lo scopo di visualizzare i dati relativi ad una precisa anagrafica. Viene richiamata dalla schermata \emph{MainViewer} nel caso in cui l'utente abbia selezionato un'anagrafica o nel caso in cui voglia crearne una nuova. I dati dell'anagrafica vengono visualizzati tramite appositi comandi testuali. Il pulsante \emph{Modifica} consente di modificare i dati dell'anagrafica, il pulsante \emph{Certificati} permette di accedere all'elenco dei certificati relativi a quell'anagrafica, il pulsante \emph{Stampa} permette di stampare i dati dell'anagrafica, e il pulsante \emph{Esci} di ritornare alla schermata di elenco delle anagrafiche.\end{par}
			\begin{figure}[htbp]
				\caption{Schermata \emph{AnagraficaViewer}.}
				\label{interfaccia_anagrafica}
				\centering
				\includegraphics[width=0.8\textwidth]{interfaccia_anagrafica.pdf}
			\end{figure}

			\begin{par}La figura~\ref{interfaccia_certificati} mostra il layout della schermata \emph{CertificatoViewer}, che corrisponde all'omonima classe e consente all'utente di visualizzare i certificati di una specifica anagrafica, modificare lo stato di un certificato, e di crearne di nuovi. L'elenco dei certificati è mostrato in un'apposta lista: cliccando su un certificato viene apeto il relativo file PDF. La modifica dello stato avviene attraverso un'appostia checkbox. L'inserimento di un nuovo certificato avviene tramite il pulsante \emph{Nuovo}, dopo aver selezionato il tipo di certificato dal menù a tendina \emph{tipo}. Il punsalte \emph{Esci} permette di ritornare alla schermata dell'anagrafica.\end{par}
			\begin{figure}[htbp]
				\caption{Schermata \emph{CertificatoViewer}.}
				\label{interfaccia_certificati}
				\centering
				\includegraphics[width=0.8\textwidth]{interfaccia_certificati.pdf}
			\end{figure}

	\chapter{Base di dati}

			\begin{par}In questo capitolo viene descritta l'architettura della base di dati, ovvero vengono definite le varie tabelle e i singoli campi, a partire dal modello ER presente nel documento delle specifiche. La base di dati è costituita dalle seguenti tabelle:
			\begin{itemize}
				\item \emph{person} (vedi tabella~\ref{tab_person}): contiene i dati anagrafici delle persone inserite nel database
				\item \emph{certificate} (vedi tabella~\ref{tab_certificate}): contiene i dati dei certificato
				\item \emph{certificate\_type} (vedi tabella~\ref{tab_certificate_type}): contiene i dati dei tipi di certificati
				\item \emph{city} (vedi tabella~\ref{tab_city}): contiene i dati delle città; viene presa come riferimento la tabella ISTAT, mentre nel caso in cui si debba inserire dati di città straniere, si inserisce semplicemente il relativo stato (anche l'elenco degli stati ha come fonte l'ISTAT)
				\item \emph{maritalState} (vedi tabella~\ref{tab_maritalState}): contiene gli stati coniugali possibili, ovvero ‘‘Celibe/Nubile’’ o ‘‘Sposato’’
				\item \emph{state} (vedi tabella~\ref{tab_state}): contiene gli stati possibili, ovvero ‘‘VALIDO’’ o ‘‘NON VALIDO’’
			\end{itemize}\end{par}

	% person
	\begin{table}[htbp]\caption{Tabella \emph{person}.}\label{tab_person}\footnotesize\begin{center}\begin{tabularx}{\textwidth}{llXc}
	\toprule
	\textbf{Campo}					& \textbf{Tipo}	& \textbf{Descrizione}											& \textbf{Attributi}  \\
	\midrule
	id									& Integer			& Numero progressivo											& Primary Key, Not null \\
	\midrule
	name								& Varchar(50)		& Nome dell'anagrafica											& Not null \\
	\midrule
	surname							& Varchar(50)		& Cognome dell'anagrafica										& Not null \\
	\midrule
	bornDate							& Date				& Data di nascita dell'anagrafica									& Not null \\
	\midrule
	bornCity							& Integer			& Città di nascita													& Not null \\
	\midrule
	residence\_street					& Varchar(50)		& Via della residenza												& Not null \\
	\midrule
	residence\_houseNumber		& Varchar(10)		& Numero civico della residenza									& Not null \\
	\midrule
	residence\_city					& Integer			& Città della residenza											& Not null \\
	\midrule
	domicile\_street					& Varchar(50)		& Via del domicilio												& Not null \\
	\midrule
	domicile\_houseNumber			& Varchar(10)		& Numero civico del domicilio									& Not null \\
	\midrule
	domicile\_city						& Integer			& Città del domicilio												& Not null \\
	\midrule
	maritalState						& Integer			& Stato civile														& Not null	\\
	\midrule
	state								& Integer			& Stato dell'anagrafica											& Not null \\
	\bottomrule
	\end{tabularx}\end{center}\end{table}

	% certificate
	\begin{table}[htbp]\caption{Tabella \emph{certificate}.}\label{tab_certificate}\footnotesize\begin{center}\begin{tabularx}{\textwidth}{llXc}
	\toprule
	\textbf{Campo}	& \textbf{Tipo}	& \textbf{Descrizione}											& \textbf{Attributi} \\
	\midrule
	id					& Integer			& Numero progressivo											& Primary Key, Not null \\
	\midrule
	person				& Integer			& Anagrafica a cui appartiene il certificato						& Not null \\
	\midrule
	emissionDate		& Date				& Data di emissione del certificato								& Not null \\
	\midrule
	type				& Integer			& Tipo del certificato												& Not null \\
	\midrule
	path				& Text				& Path del file PDF del certificato									& Not null \\
	\midrule
	state				& Integer			& Stato del certicato												& Not null \\
	\bottomrule
	\end{tabularx}\end{center}\end{table}

	% certificate_type
	\begin{table}[htbp]\caption{Tabella \emph{certificate\_type}.}\label{tab_certificate_type}\footnotesize\begin{center}\begin{tabularx}{\textwidth}{llXc}
	\toprule
	\textbf{Campo}	& \textbf{Tipo}	& \textbf{Descrizione}			& \textbf{Attributi} \\
	\midrule
	id					& Integer			& Numero progressivo			& Primary Key, Not null \\
	\midrule
	name				& Varchar(50)		& Nome del certificato			& Not null \\
	\midrule
	text				& Text				& Testo del certificato				& Not null \\
	\bottomrule
	\end{tabularx}\end{center}\end{table}
	
	% city
	\begin{table}[htbp]\caption{Tabella \emph{city}.}\label{tab_city}\footnotesize\begin{center}\begin{tabularx}{\textwidth}{llXc}
	\toprule
	\textbf{Campo}	& \textbf{Tipo}	& \textbf{Descrizione}			& \textbf{Attributi} \\
	\midrule
	nome				& Varchar(20)		& Nome della città				& Primary Key, Not null \\
	\midrule
	CAP				& Varchar(5)		& CAP della città					& \\
	\bottomrule
	\end{tabularx}\end{center}\end{table}

	% maritalState
	\begin{table}[htbp]\caption{Tabella \emph{maritalState}.}\label{tab_maritalState}\footnotesize\begin{center}\begin{tabularx}{\textwidth}{llXc}
	\toprule
	\textbf{Campo}	& \textbf{Tipo}	& \textbf{Descrizione}					& \textbf{Attributi} \\
	\midrule
	id					& Integer			& Numer progressivo						& Primary Key, Not null \\
	\midrule
	description		& Varchar(13)		& Descrizione dello stato coniugale		& Not null \\
	\bottomrule
	\end{tabularx}\end{center}\end{table}

	% state
	\begin{table}[htbp]\caption{Tabella \emph{state}.}\label{tab_state}\footnotesize\begin{center}\begin{tabularx}{\textwidth}{llXc}
	\toprule
	\textbf{Campo}	& \textbf{Tipo}	& \textbf{Descrizione}		& \textbf{Attributi} \\
	\midrule
	id					& Integer			& Numer progressivo			& Primary Key, Not null \\
	\midrule
	description		& Varchar(10)		& Descrizione dello stato		& Not null \\
	\bottomrule
	\end{tabularx}\end{center}\end{table}

% File dei certificati
	\chapter{File dei certificati}
	\begin{par}I certificati verranno salvati in formato PDF in una cartella \emph{certificates} posizionata nella stessa cartella dell'applicazione. Il nome di ciascun file sarà formato dall'id del certificato più un underscore più l'id dell'anagrafica a cui il certificato è associato più l'estensione .pdf.\newline\end{par}

	\begin{par}I certificati avranno i testi seguenti.
	\begin{itemize}
		\item{\textbf{nascita}} Si certifica che COGNOME NOME è nato il DATA\_DI\_NASCITA a CITTA\_DI\_NASCITA.
		\item{\textbf{residenza}} Si certifica che COGNOME NOME risiede a CITTA\_DI\_RESIDENZA in VIA NUMERO.
		\item{\textbf{domicilio}} Si certifica che COGNOME NOME è domiciliato a CITTA\_DI\_RESIDENZA in VIA NUMERO.
	\end{itemize}\end{par}

% Caratteristiche di usabilità
	\chapter{Caratteristiche di usabilità}
	\begin{par}Dati i tempi stretti di sviluppo per il software \emph{People} e la mancanza di richieste specifiche di usabilità da parte dell'utente, il livello richiesto di usabilità per questo software è quello minimo, tale da consentire un'interazione abbastanza intuitiva da parte dell'utente. Non verranno effettuati pertanto studi di usabilità, nè l'interfaccia utente verrà arricchita di funzionalità per aumentare questa caratteristica.\end{par}

% Tecnologie
	\chapter{Tecnologie utilizzate}
		\begin{par}Il software verrà sviluppato per sistemi \emph{Mac OS X} (dalla versione 10.6 in poi). I linguaggio utilizzato sarà il \emph{Java}. Il database utilizzato sarà \emph{MySql}.\end{par}

\end{document}
